#!/bin/bash

# 源代码目录


# 控制是否强制编译的变量，默认为false
force_compile=false


# 检查是否有传入参数
for param in "$@"; do
  case $param in
    force)
      # 如果参数是"force"，则设置强制编译
      force_compile=true
      ;;
    help)
      # 如果参数是"help"，则显示帮助信息
      show_help
      ;;
    *)
      # 遇到未知参数时显示帮助信息
      echo "未知参数: $param"
      show_help
      ;;
  esac
done

# 显示帮助信息
show_help() {
    echo "使用方法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  force        强制编译项目，即使没有检测到代码更新"
    echo "  start        启动项目容器（默认不启动）"
    echo "  help         显示帮助信息"
    echo ""
    exit 0
}


update_git(){
    local source_dir=$1
    local branch=$2
    # 切换到源代码目录并更新远程仓库信息
    echo "正在检查远程代码更新${source_dir}...${branch}"

    cd "${source_dir}" || { echo "进入目录失败"; exit 1; }
    git fetch origin

    if [ $? -ne 0 ]; then
        echo "获取最新代码失败"
        return 1
    fi


    # 比较本地仓库和远程仓库的差异
    local LOCAL=$(git rev-parse @)
    local REMOTE=$(git rev-parse @{u})
    
    # 如果不是强制编译，并且没有检测到代码更新，则退出脚本
    if [ "$force_compile" == "false" ] && [ $LOCAL = $REMOTE ]; then
        echo "${branch}没有更新，退出脚本。"
        return 1
    fi


    git checkout "${branch}"
    if [ $? -ne 0 ]; then
        echo "切换分支失败"
        return 1
    fi
    
    git pull origin "${branch}"
    if [ $? -ne 0 ]; then
        echo "拉取最新代码失败"
        return 1
    fi




    # 切换到源代码目录并拉取最新代码
    echo "正在更新项目代码..."
    cd "${source_dir}" && git pull origin ${branch}
}


build_image() {
    local name=$1            # 项目名称
    local source_dir=$2      # 源代码目录
    local source_jar=$3      # 源jar文件名
    local output_dir=$4      # 输出目录

    # 检查必要的参数是否已提供
    if [[ -z "$name" || -z "$source_dir" || -z "$source_jar" || -z "$output_dir" ]]; then
        echo "缺少必要的参数。用法: build_image <name> <source_dir> <source_jar> <output_dir>"
        return 1
    fi

    # 使用Maven编译项目，跳过测试
    echo "正在编译项目..."
    cd "${source_dir}" || { echo "无法切换到目录: ${source_dir}"; return 1; }
    mvn -f "${source_dir}/pom.xml" clean package -DskipTests
    if [[ $? -ne 0 ]]; then
        echo "Maven 编译失败。"
        return 1
    fi

    # 获取最新的git标签和当前日期 $(git describe --tags --abbrev=0)
    local tag=$(git describe --tags)   
    local build_date=$(date +%Y-%m-%d)

    if [[ -z "$tag" ]]; then
        echo "无法获取git标签。"
        return 1
    fi

    # 定义jar包名称
    local jar_name="${name}-${tag}-${build_date}.jar"

    # 复制jar包到输出目录
    if [[ -f "${source_dir}/${source_jar}" ]]; then
        mc rm "${output_dir}/${jar_name}" 2>/dev/null
        mc rm "${output_dir}/${name}-latest.jar" 2>/dev/null
        mc cp "${source_dir}/${source_jar}" "${output_dir}/${jar_name}"
        mc cp "${source_dir}/${source_jar}" "${output_dir}/${name}-latest.jar"
        echo "Jar包已编译并移动到指定目录: ${output_dir}/${jar_name}"
    else
        echo "找不到源jar文件: ${source_dir}/${source_jar}"
        return 1
    fi
}



# 更新代码 编译jar 上传minio
update_git "/home/admin/nong_shi_tong/farming-service-enterprise" "dev/suihua" && build_image "nst-enterprise" "/home/admin/nong_shi_tong/farming-service-enterprise" "docker/jar/farming-service-enterprise-1.0.0-release.jar" "myminio/archive/nong_shi_tong/enterprise"
update_git "/home/admin/nong_shi_tong/farming-service-manager" "dev/suihua" && build_image "nst-manager" "/home/admin/nong_shi_tong/farming-service-manager" "docker/jar/farming-service-1.0.0-release.jar" "myminio/archive/nong_shi_tong/manager"


